
package com.ys.chatserver.im.dto;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

/**
 * 指令body：群聊/世界频道聊天消息的数据内容封装类.
 * <p>
 * 即聊天数据从MobileIMSDK底层发送时，会将本对象转JSON字串后，作为
 * Protocal的dataContent数据进行传输。
 * 
 * @version 1.0
 * @since 4.3
 */
public class MsgBody4Group extends MsgBody4Guest
{
	/** 
	 * 群聊消息扩散写前原始消息的指纹码。
	 * <p>
	 * 此指纹码目前主要用于消息“撤回”功能时。
	 * 且仅对由“人”发起的正常聊天消息有意义，对{@link MsgType#TYPE_SYSTEAM$INFO}类型的消息无意义。
	 */
	protected String parentFp = null;
	
	public MsgBody4Group()
	{
		super();
		this.cy = CHAT_TYPE_GROUP$CHAT;
	}
	
	public String getParentFp() {
		return parentFp;
	}
	public void setParentFp(String parentFp) {
		this.parentFp = parentFp;
	}

	/**
	 * 构造世界频道/普通群聊系统通知(消息)协议体的DTO对象.
	 *
	 * @param toGid 要发送到的群id
	 * @param msg 消息内容，纯文本字串，可能是聊天文字、图片文件名或语音文件名等，但一定不是JSON字串
	 */
	public static MsgBody4Group constructGroupSystenMsgBody(String toGid, String msg)
	{
//		MsgBody4Group tcmd = new MsgBody4Group();
//		tcmd.setF(srcUserUid);
//		tcmd.setNickName(srcNickName);
//		tcmd.setT(toGid);
//		tcmd.setM(msg);
//		tcmd.setTy(msgType);
//		tcmd.setCy(MsgBody4Group.CHAT_TYPE_GROUP$CHAT);
//		
//		return tcmd;
		
		return MsgBody4Group.constructGroupChatMsgBody(
                TYPE_SYSTEAM$INFO
				// 此值一定是"0"，因为是服务端发给客户端的嘛
				, "0"
				// 服务端发送的系统级消息，没昵称
				, ""
				, toGid
				, msg
				, null);
	}
	
	/**
	 * 构造世界频道/普通群聊消息协议体的DTO对象.
	 *
	 * @param srcUserUid 发送方的uid
	 * @param srcNickName 发送方的昵称
	 * @param toGid 要发送到的群id
	 * @param msg 消息内容，纯文本字串，可能是聊天文字、图片文件名或语音文件名等，但一定不是JSON字串
	 * @param parentFp 群聊消息扩散写前原始消息的指纹码（此指纹码目前主要用于消息“撤回”功能时）
	 */
	public static MsgBody4Group constructGroupChatMsgBody(int msgType
			, String srcUserUid, String srcNickName, String toGid, String msg, String parentFp)
	{
		MsgBody4Group tcmd = new MsgBody4Group();
		tcmd.setF(srcUserUid);
		tcmd.setNickName(srcNickName);
		tcmd.setT(toGid);
		tcmd.setM(msg);
		tcmd.setTy(msgType);
		tcmd.setParentFp(parentFp);
		return tcmd;
	}
	
	/**
	 * 从JSON字串中反序列化。
	 * 
	 * @param originalMsg 即MsgBodyRoot对象的JSON序列化文本
	 * @return 解析成功则返回对象，否则返回null
	 * @since 2.0_rc11
	 */
	public static MsgBody4Group parseFromSender(String originalMsg)
	{
		try{
			return new Gson().fromJson(originalMsg, MsgBody4Group.class);
		}
		catch (JsonSyntaxException e){
			return null;
		}
	}
}
